

/**
 结论：
 ==》对不可变字符串
 被copy修饰的不可变字符串
 在进行等号，copy赋值时，都是浅拷贝，没有生成新的对象
 在进行mutableCopy时，深拷贝，生成了新的对象

 被strong修饰的不可变字符串
 在进行等号，copy赋值时，都是浅拷贝，没有生成新的对象
 在进行mutableCopy时，深拷贝，生成了新的对象

 ==》可变字符串
 被copy修饰的可变字符串
 无轮是等号，copy还是mutableCopy赋值，都是深拷贝
 比较有趣的是：等号，copy和mutableCopy出来的新对象是同一个

 被strong修饰的可变字符串
 等号赋值：浅拷贝，没有生成新的对象
 copy和mutableCopy 深拷贝，生成的是新对象
 */

#pragma mark - copy修饰的不可变字符串
2018-06-07 17:42:51.252186+0800 技术点总结[36139:1532165] 内存地址：
str1_copy = 0x109b1fa38
str2_copy = 0x109b1fa38
str3_copy = 0xa000049747365745
str       = 0x109b1fa38
2018-06-07 17:42:51.253063+0800 技术点总结[36139:1532165] 指针地址：
str1_copy = 0x7f8c3a709538
str2_copy = 0x7f8c3a709540
str3_copy = 0x7f8c3a709548
str       = 0x7ffee6100200
2018-06-07 17:42:51.253182+0800 技术点总结[36139:1532165] 值：
str1_copy = testI
str2_copy = testI
str3_copy = testI
str       = testI
2018-06-07 17:42:51.253294+0800 技术点总结[36139:1532165] 真实类型：
str1_class = __NSCFConstantString
str2_class = __NSCFConstantString
str2_class = NSTaggedPointerString

#pragma mark - strong修饰的不可变字符串
2018-06-07 17:42:30.663942+0800 技术点总结[36139:1532165] 内存地址：
str1_Strong = 0x109b1fa38
str1_Strong = 0x109b1fa38
str1_Strong = 0x604000251640
str         = 0x109b1fa38
2018-06-07 17:42:30.664279+0800 技术点总结[36139:1532165] 指针地址：
str1_Strong = 0x7f8c3a709550
str1_Strong = 0x7f8c3a709558
str1_Strong = 0x7f8c3a709560
str         = 0x7ffee6100200
2018-06-07 17:42:30.664733+0800 技术点总结[36139:1532165] 值：
str1_Strong = testI
str1_Strong = testI
str1_Strong = testI
str         = testI
2018-06-07 17:42:30.664881+0800 技术点总结[36139:1532165] 真实类型：
str1_class = __NSCFConstantString
str2_class = __NSCFConstantString
str2_class = __NSCFString

#pragma mark - copy修饰可变字符串
2018-06-07 17:41:59.804585+0800 技术点总结[36139:1532165] 内存地址：
str1_copy = 0xa00004d747365745
str2_copy = 0xa00004d747365745
str3_copy = 0xa00004d747365745
str       = 0x604000251820
2018-06-07 17:41:59.805702+0800 技术点总结[36139:1532165] 指针地址：
str1_copy = 0x7f8c3a709538
str2_copy = 0x7f8c3a709540
str3_copy = 0x7f8c3a709548
str       = 0x7ffee6100200
2018-06-07 17:41:59.805832+0800 技术点总结[36139:1532165] 值：
str1_copy = testM
str2_copy = testM
str3_copy = testM
str       = testM+++hello
2018-06-07 17:41:59.805944+0800 技术点总结[36139:1532165] 真实类型：
str1_class = NSTaggedPointerString
str2_class = NSTaggedPointerString
str2_class = NSTaggedPointerString


#pragma mark - strong修饰可变字符串
str1_Strong = 0x60000025d0d0
str1_Strong = 0xa00004d747365745
str1_Strong = 0x60000025bc00
str         = 0x60000025d0d0
2018-06-07 17:40:42.536000+0800 技术点总结[36139:1532165] 指针地址：
str1_Strong = 0x7f8c3a709550
str1_Strong = 0x7f8c3a709558
str1_Strong = 0x7f8c3a709560
str         = 0x7ffee6100200
2018-06-07 17:40:42.536472+0800 技术点总结[36139:1532165] 值：
str1_Strong = testM+++hello
str1_Strong = testM
str1_Strong = testM
str         = testM+++hello
2018-06-07 17:40:42.536791+0800 技术点总结[36139:1532165] 真实类型：
str1_class = __NSCFString
str2_class = NSTaggedPointerString
str2_class = __NSCFString


